#ifndef _FILE_
#define _FILE_
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <stdbool.h>
#include <linux/fb.h>
#include <linux/input.h>
#include <time.h>
#include <pthread.h>
// #include "../../lvgl/lvgl.h"
#define LCD_PATH "dev/fb0"
#define BMP_PATH "/pic"
#define TOUCH_PATH "dev/input/event0"
struct bmp_info;
struct album_info;
struct game_info;
typedef struct lcd_info
{
    int lcd_w;
    int lcd_h;
    struct fb_var_screeninfo var;
    int fp_dev;
    int fp_input;
    int touch_x;
    int touch_y;
    int *map_dev;
    char start_ai[20];
    int fp_font;
    char *map_font;
    int font_size;
    struct game_info *game_General;
    struct album_info *album_General;
    char time_buf[128];

} LCD, *LCD_P;

typedef struct album_info
{
    int bmp_num;
    int bmp_page;
    int direction;
    int small_bmp_flag;
    struct bmp_info *bmp_header;
} ALB, *ALB_P;

typedef struct bmp_info
{
    char bmp_name[20];
    char bmp_path[256];
    struct bmp_info *next;
    struct bmp_info *prev;
} BMP, *BMP_P;

typedef struct game_info
{
    int ball_x0;
    int ball_y0;
    int ball_r;
    int move_x;
    int move_y;
    int ball_flag;
    int ball_mask_x;
    int ball_mask_y;
    int score;
    int game_difficulty;

} GAME, *GAME_P;
pthread_t ball_run;

// pthread_t board_run;

// **************************************************************
// 初始化lcd参数
LCD_P lcd_init();
// 获取touch坐标
bool get_touch_pos(LCD_P lcd);
// 开机动画
bool start_ai_show(LCD_P lcd);
// 主控页面
bool main_interface(LCD_P lcd);
// 查找bmp图片路径
bool bmp_path_search(LCD_P lcd);
// 刷白屏
bool show_white_screen(LCD_P lcd);
// 触摸屏的方向
bool touch_direction(LCD_P lcd);
// 字体
bool line(LCD_P lcd, char *buf, int x, int y);
// 一行字体
bool show_font_one(LCD_P lcd, char letter, int where_x, int where_y);
// 获取随机数
bool get_rand(LCD_P lcd);
// 获取时间
void *get_time_thread(void *arg);

// 释放空间
bool free_all(LCD_P lcd);
// // 显示四个按钮
// bool show_four_btn(LCD_P lcd);

// *****************************************************
// 游戏总接口
bool main_game(LCD_P lcd);
// 初始化game结构体
bool game_info_bash(LCD_P lcd);
// 动球
void *ball_running(void *arg);
// 显示一个球
bool show_one_ball(LCD_P lcd);
// 木板制作
bool show_board(LCD_P lcd);
// 获得lcd——touch_move坐标
bool get_touch_move(LCD_P lcd);
// 显示静态木板
bool show_board_picter(LCD_P lcd);
// 显示一个球并且刷白屏
bool show_one_ball_arn(LCD_P lcd);
// 开机动画
bool main_start_ai(LCD_P lcd);

// **************************************************************************
// 初始化图片信息
bool album_info(LCD_P lcd);
// 图片总接口
bool main_album(LCD_P lcd);
// 创建总结构体
ALB_P create_album_info();
// 创建BMP节点
BMP_P create_bmp_node();
// 添加bmp节点
bool add_bmp_node(LCD_P lcd, BMP_P node);
// 显示缩列图
bool show_small_bmp(LCD_P lcd, BMP_P node, int zoom, int where_x, int where_y);
// 显示图接口
bool show_bmp_General(LCD_P lcd, int page);
// 显示原图
bool Original_bmp_show(LCD_P lcd, char *bmp_path);
// 显所有图片原图
bool all_bmp_show_org(LCD_P lcd, int page);
// 显示退出按钮图
bool Show_One_Thumbnail(LCD_P lcd, const char *bmp_path, int zoomout, int bmp_x, int bmp_y);
// 删除图片
bool remove_org_bmp(int num, LCD_P lcd, BMP_P bmp_next);
// 销毁bmp节点
bool del_bmp_node(LCD_P lcd);

// *****************************************************
#endif
